package com.waiter.moximoxi.utils;

import android.content.Context;
import android.text.format.Time;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import cn.yhong.aframework.utils.SpUtils;


public class DateUtils {

    /**
     * 判断2个时间大小 yyyy-MM-dd HH:mm 格式（自己可以修改成想要的时间格式） 列表添加时间
     *
     * @param startTime
     * @param endTime
     * @return
     */
    public static boolean getTimeCompareSize(String startTime, String endTime) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");// 年-月-日 时-分
        try {
            Date date1 = dateFormat.parse(startTime);// 开始时间
            Date date2 = dateFormat.parse(endTime);// 结束时间
            // 1 结束时间小于开始时间 2 开始时间与结束时间相同 3 结束时间大于开始时间
            if (date2.getTime() < date1.getTime()) {
                return false;
            } else if (date2.getTime() == date1.getTime()) {
                return false;
            } else if (date2.getTime() > date1.getTime()) {
                // 正常情况下的逻辑操作.
                return true;
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断2个时间大小 yyyy-MM-dd HH:mm 格式（自己可以修改成想要的时间格式） 列表添加时间
     *
     * @param startTime
     * @param endTime
     * @return
     */
    public static boolean getTimeHistory(String startTime, String endTime) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd");// 年-月-日 时-分
        try {
            Date date1 = dateFormat.parse(startTime);// 开始时间
            Date date2 = dateFormat.parse(endTime);// 结束时间
            // 1 结束时间小于开始时间 2 开始时间与结束时间相同 3 结束时间大于开始时间
            if (date2.getTime() < date1.getTime()) {
                return false;
            } else if (date2.getTime() == date1.getTime()) {
                return true;
            } else if (date2.getTime() > date1.getTime()) {
                // 正常情况下的逻辑操作.
                return true;
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断2个时间大小 yyyy-MM-dd HH:mm 格式（自己可以修改成想要的时间格式） 列表添加时间
     *
     * @param startTime
     * @param endTime
     * @return
     */
    public static boolean getTimeForVip(String startTime, String endTime, int type) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 年-月-日 时-分
        try {
            Date date1 = dateFormat.parse(startTime);// 开始时间
            Date date2 = dateFormat.parse(endTime);// 结束时间
            // 1 结束时间小于开始时间 2 开始时间与结束时间相同 3 结束时间大于开始时间
            if (type == 1) {
                if (date2.getTime() < date1.getTime()) {
                    return true;
                } else if (date2.getTime() == date1.getTime()) {
                    return true;
                } else if (date2.getTime() > date1.getTime()) {
                    // 正常情况下的逻辑操作.
                    return false;
                }
            } else {
                if (date2.getTime() < date1.getTime()) {
                    return true;
                } else if (date2.getTime() == date1.getTime()) {
                    return true;
                } else if (date2.getTime() > date1.getTime()) {
                    // 正常情况下的逻辑操作.
                    return false;
                }
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return false;
    }

    public static String getNowDate(String format) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);// 年-月-日 时-分
        return dateFormat.format(new Date());
    }

    /**
     * 日期转时间
     *
     * @return
     */
    public static Date getTimetoDate(String time) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 年-月-日 时-分
        try {
            Date parse = dateFormat.parse(time);
            return parse;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getNowDate(Date date) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd");// 年-月-日 时-分
        return dateFormat.format(date);
    }

    public static String getNowDate1(Date date) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 年-月-日 时-分
        return dateFormat.format(date);
    }


    /**
     * 得到几秒后的时间
     *
     * @param d
     * @return
     */
    public static Date getDateBefore(Date d) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.SECOND, now.get(Calendar.SECOND) + 3);
        return now.getTime();
    }


    /*
     * 将时间转换为时间戳
     */
    public static String dateToStamp(String s) throws ParseException{
        String res;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = simpleDateFormat.parse(s);
        long ts = date.getTime();
        res = String.valueOf(ts);
        return res;
    }

    /*
     * 将时间戳转换为时间
     */
    public static String stampToDate(String s){
        String res;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long lt = new Long(s);
        Date date = new Date(lt);
        res = simpleDateFormat.format(date);
        return res;
    }


    /**
     * 判断时间是否是今天
     * @param when
     * @return
     */
    public static boolean isToday(long when) {
        Time time = new Time("GTM+8");
        time.set(when);

        int thenYear = time.year;
        int thenMonth = time.month;
        int thenMonthDay = time.monthDay;

        time.set(System.currentTimeMillis());
        return (thenYear == time.year) && (thenMonth == time.month) && (thenMonthDay == time.monthDay);
    }


    /**
     * 判断是否是同一天
     * @param context
     */
    public static boolean dateRemark(Context context) {
        //获得保存的天数，如果没有记录就赋值为-1表示第一次执行
        int day = (int) SpUtils.getData(context, "SingDay", -1);
        int curDay = Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
        if ((day == -1 || day != curDay)) {
        /*
         * -1表明是第一次执行
         * day != curDay表示不是同一天
         * 保存当前天数
        */
            SpUtils.putData(context, "SingDay", curDay);
            return true;
        } else {
            //同一天不执行操作
            return false;
        }
    }

}
